Zeile je nach Feldwert komplett färben
Bei Excel-Listen gibt es häufig die Anforderung, eine komplette Zeile abhängig von einem bestimmten Feldwert in dieser Zeile einzufärben. Das geht mit Hilfe der bedingten Formatierung. Allerdings ist diese Lösung meine Erachtens sehr komplex, unübersichtlich und schlecht zu warten.
Aus diesem Grund habe ich ein kleines Visual-Basic-Script geschrieben, mit dessen Hilfe das Einfärben einer Zeile einfach und nachvollziehbar funktioniert. Die Zeilenfarbe soll abhängig vom Status sein.
Statustabelle
Hierfür füge die folgende Tabelle ein:
Um die Tabelle zu erstellen, trage die Werte wie aus dem Screenshot ersichtlich in die Zellen ein und klicke auf Einfügen – Tabelle. Dann markiere den Bereich:
Du hast nun die Tabelle erstellt. Mit dieser Tabelle definieren wir den die Farbe der einzelnen Status.
Liste
Ausgangsbasis soll eine kleine Liste sein. Erstelle diese Liste ebenfalls als Tabelle und erstelle die Datenüberprüfung vom Typ Liste für das Feld Status. Wie das geht, ist in diesem Artikel beschrieben.
VBA
Wir erstellen nun eine kleine Visual-Basic-Routine, die bei jeder Änderung des Arbeitsblattes ausgeführt wird. Öffne in den Entwicklertools (muss gegebenenfalls in den Excel-Optionen aktiviert werden!) den Visual Basic Editor und füge für das Arbeitsblatt mit der Liste den folgenden Code ein:
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim l_column As Integer Dim l_color As Integer Dim l_status_row As Integer Dim l_status_col As Integer Dim l_number_of_columns_to_color As Integer ''' Anzahl der einzufärbenden Spalten l_number_of_columns_to_color = 3 ''' Index der Spalte, in der der Status definiert wurde l_status_col = 1 If Target.Column = 2 Then For l_status_row = 1 To 20 If Worksheets("Status").Cells(l_status_row, l_status_col).Value = Cells(Target.Row, Target.Column).Value Then On Error GoTo NOT_AN_INTEGER l_color = CInt(Worksheets("Status").Cells(l_status_row, l_status_col + 1).Value) Exit For NOT_AN_INTEGER: l_color = 0 End If Next l_status_row For l_column = 1 To l_number_of_columns_to_color Cells(Target.Row, l_column).Interior.ColorIndex = l_color Next l_column End If End Sub
[notice type=’alert’]Achte darauf, dass der im Coding verwendete Name für das Arbeitsblatt Worksheets(“Status”) mit deinem überein stimmt![/notice]
[notice type=’info’]Die Arbeitsmappe enthält nun Coding und kann nicht mehr als normale Excel-Datei gespeichert werden. Du musst sie als XLSM-Datei (Excel-Arbeitsmappe mit Makros) speichern:
[/notice]
Anmerkungen
Die Farbe der Zeilen wird nicht automatisch geändert, wenn der Farbindex in der Statustabelle geändert wird!
Die Farbe wird neu gesetzt, sobald ein Status ausgewählt wird. Möchte man sicher sein, dass eine Zeile immer komplett eingefärbt ist, dann kann die Codezeile
If Target.Column = 2 Then
und das entsprechende End If am Ende des Codings entfernt werden. In diesem Fall wird bei jeder Änderung in der Tabelle die Farbe für die Tabellenzeile neu gesetzt.
Die Anzahl der einzufärbenden Zellen muss im Coding angepasst werden. Werden Spalten an die Liste angehängt, dann muss der Wert l_number_of_columns_to_color angepasst werden.
- Interview mit Björn Schulz (Software-Heroes.com) - 3. September 2024
- Daten aus ALV ermitteln - 3. September 2024
- So lange es den SAPGUI noch gibt… - 27. Juni 2024